<?php

namespace adminmatrix\admin\service;

use think\App;

class EnvService
{
    public string $envPath;
    public function __construct()
    {
        $this->envPath = App()->getRootPath() . '.env';
    }

    /**
     * 设置环境变量值
     * @param string $key 环境变量名
     * @param string $value 环境变量值
     * @return bool 操作是否成功
     */
    public function set($key , $value)
    {
        return $this->modify($key , $value);
    }

    /**
     * 检查环境变量是否存在
     * @param string $key 环境变量名
     * @return bool 变量是否存在
     */
    public function exists($key)
    {
        return $this->get($key) !== false;
    }


    public function get($value){
        return env($value);
    }

    public function delete($key){
        return $this->modify($key, false);
    }
    /**
     * 修改环境变量的核心方法
     * @param string $key 环境变量名
     * @param string|false $value 环境变量值，设置为false时删除该变量
     * @return bool 操作是否成功
     */
    private function modify($key, $value)
    {
        // 检查文件是否存在且可写
        if (!file_exists($this->envPath)) {
            if ($value === false) {
                return true; // 删除不存在的变量视为成功
            }
            // 创建新的.env文件
            if (!touch($this->envPath)) {
                return false;
            }
        }

        if (!is_writable($this->envPath)) {
            return false;
        }

        // 读取文件内容
        $content = file_get_contents($this->envPath);
        if ($content === false) {
            return false;
        }

        // 检查变量是否已存在
        $pattern = '/^' . preg_quote($key, '/') . '\s*=\s*(.*)$/m';

        if (preg_match($pattern, $content, $matches)) {
            // 变量已存在
            if ($value === false) {
                // 删除变量
                $content = preg_replace($pattern, '', $content);
            } else {
                // 修改变量
                $escapedValue = preg_quote($value, '/');
                $content = preg_replace($pattern, "$key=$value", $content);
            }
        } elseif ($value !== false) {
            // 变量不存在，新增
            $content .= "\n$key=$value";
        }

        // 清理多余的空行
        $content = preg_replace("/\n+/", "\n", $content);
        $content = trim($content) . "\n";

        // 写入文件
        return file_put_contents($this->envPath, $content) !== false;
    }
}